home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib31b.dsk / COPYA ENHANCED.bas < prev    next >
BASIC Source File  |  2023-02-26  |  5KB  |  79 lines

  1. 0  TEXT 
  2. 10  REM ************************
  3. 20  REM *       DISK COPY      *
  4. 30  REM *     COPYRIGHT BY     *
  5. 40  REM *  APPLE COMPUTER,INC. *
  6. 50  REM *         1980         *
  7. 55  REM *ENHANCED BY ANDY TUXEN*
  8. 60  REM ************************
  9. 70  PRINT "<CTRL-D>BLOAD COPY.OBJ0": REM   A$2C0
  10. 80  HOME : PRINT "     APPLE DISK DUPLICATION PROGRAM": PRINT : PRINT 
  11. 81 D$ =  CHR$(4): REM  ADDED FOR BUILDING CATALOG ENTRY
  12. 90  CALL 704:CS =  PEEK(718)/16
  13. 100  POKE 715, PEEK(110) +2: REM  BUFSTART. CHANGED FROM +1 TO +2 TO RESERVE A PAGE FOR VARIABLES NOT YET DEFINED.
  14. 110  POKE 716, PEEK(112) -1: REM BUFEND
  15. 130 I$ = " ORIGINAL":N = CS:A = 718: GOSUB 310:MS = N:N =  PEEK(720): GOSUB 320:MD = N:A = 717
  16. 132 I$ = "DUPLICATE":N = MS: GOSUB 310:SS = N:N = 3 -MD: GOSUB 320:SD = N
  17. 160 FT = 1
  18. 163  VTAB 5: HTAB 24: PRINT "       ": VTAB 8: HTAB 24: PRINT "             "
  19. 165  CALL 704: POKE 717,SS *16: POKE 718,MS *16: POKE 719,SD: POKE 720,MD
  20. 170  VTAB 17: POKE 34,16: CALL  -936
  21. 175  HOME : POKE 222,0
  22. 180  PRINT "-- PRESS 'RETURN' KEY TO BEGIN COPY --";: INPUT " ";I$
  23. 185  HOME 
  24. 190 DK$ = " ORIGINAL": GOSUB 360: REM  GET ORIG DISK
  25. 191  IF   NOT FT  THEN 200
  26. 192 IOB =  PEEK(60) + PEEK(61) *256: POKE IOB +1,MS *16: POKE IOB +2,MD: POKE IOB +3,0: POKE IOB +8,13: POKE IOB +9, PEEK(715):RWTS =  PEEK(715) *256:BF = RWTS +13
  27. 193  RESTORE : FOR I = RWTS TO RWTS +12: READ D: POKE I,D: NEXT : DATA  32,227,3,32,217,3,144,4,169,1,133,222,96
  28. 194  POKE IOB +4,17: POKE IOB +5,0: POKE IOB +12,1: GOSUB 395: POKE IOB +4, PEEK(BF +1): POKE IOB +5, PEEK(BF +2): GOSUB 395:N$ = "": FOR I = 1 TO 10:N$ = N$ + CHR$( PEEK(BF +13 +I) -128): NEXT : IF N$ < >"@BACKED UP"  THEN 400
  29. 195 CS = 0: FOR I = 1 TO 7:SA =  -16384 +256 *I: IF  PEEK(SA) = 8  AND  PEEK(SA +1) = 120  AND  PEEK(SA +2) = 40  THEN SL = I:I = 8
  30. 196  NEXT : IF SL >0  THEN  PRINT D$;"PR#";SL: PRINT D$"IN#";SL: INPUT "%";T$: PRINT D$;"IN#0": PRINT D$;"PR#0":T$ =  LEFT$(T$,16) + RIGHT$(T$,3)
  31. 197  IF T$ = ""  THEN  VTAB 20: HTAB 1: PRINT "ENTER DATE/TIME STAMP(19 CHAR: MAX)": INPUT T$: HOME : IF  LEN(T$) <19  THEN T$ = T$ + LEFT$("                   ",19 - LEN(T$)): REM  19 BLANKS IN ABOVE
  32. 198  FOR I = 1 TO 19: POKE BF +24 +I, ASC( MID$ (T$,I,1)) +128: NEXT 
  33. 199  POKE IOB +12,2: GOSUB 395
  34. 200  VTAB 5: HTAB 24: INVERSE : PRINT "READING": NORMAL : CALL 707: REM  READ A HUNK
  35. 210  IF  PEEK(713) = 2  THEN 280: REM  ERROR!
  36. 225  VTAB 5: HTAB 24: PRINT "       ": IF  PEEK(713) = 1  THEN 290
  37. 230  IF   NOT FT  THEN 255: REM  NOT FIRST RD
  38. 232 FT = 0: VTAB 20: HTAB 1: PRINT "INITIALIZE DISK?";: GET A$: HOME : IF A$ = "N"  THEN 255
  39. 233  IF A$ < >"Y"  THEN 232
  40. 240 DK$ = "DUPLICATE": GOSUB 360: REM  GET DUP DISK
  41. 245  ONERR  GOTO 275
  42. 246  VTAB 8: HTAB 24: INVERSE : PRINT "INITIALIZING": NORMAL 
  43. 250  PRINT D$;"INIT XXX,S";SS;",D";SD;",V"; PEEK(714)
  44. 251  VTAB 8: HTAB 24: PRINT "            "
  45. 252  POKE 216,0: POKE 222,0
  46. 253  GOTO 256
  47. 255 DK$ = "DUPLICATE": GOSUB 360: REM  GET DUP DISK
  48. 256  VTAB 8: HTAB 24: INVERSE : PRINT "WRITING";: NORMAL : PRINT "    "
  49. 260  CALL 710: REM   WRITE A HUNK
  50. 265  VTAB 8: HTAB 24: PRINT "       "
  51. 270  IF  PEEK(713) < >2  THEN 190
  52. 275  IF  PEEK(222) = 255  THEN  STOP 
  53. 277  VTAB 18: INVERSE : PRINT "****** UNABLE TO WRITE ******<CTRL-G><CTRL-G>": GOTO 290
  54. 280  VTAB 18: INVERSE : PRINT "****** UNABLE TO READ ******<CTRL-G><CTRL-G>"
  55. 290  VTAB 19: NORMAL : POKE  -16368,0: PRINT : INPUT "DO YOU WISH TO MAKE ANOTHER COPY?";I$: IF  LEN(I$) = 0  THEN 300
  56. 295  IF  LEFT$(I$,1) = "Y"  THEN 160
  57. 300  IF  LEFT$(I$,1) < >"N"  THEN 290
  58. 305  TEXT : HOME : CALL 672: DEL 70,70: END 
  59. 310  PRINT : HTAB 1: PRINT I$;"  SLOT: ";:L = 1:H = 7: GOSUB 350: PRINT N;: NORMAL : HTAB 30: GOSUB 330: RETURN 
  60. 320  GOSUB 350: PRINT N;: NORMAL : HTAB 4: PRINT "       DRIVE: ";:L = 1:H = 2: GOSUB 330: RETURN 
  61. 330  HTAB 32: GET K$:K =  ASC(K$) +128
  62. 335  IF K = 141  THEN 340
  63. 336 K = K -176: IF K <L  OR K >H  THEN 330
  64. 337 N = K
  65. 340  HTAB 20: PRINT N;"                  ": RETURN 
  66. 350  INVERSE : HTAB 22: PRINT "DEFAULT = ";: RETURN 
  67. 360  IF MS < >SS  THEN  RETURN 
  68. 370  IF MD < >SD  THEN  RETURN 
  69. 375  HOME : IF  LEFT$(DK$,1) = "D"  THEN  PRINT 
  70. 380  PRINT "INSERT ";DK$;" DISK AND PRESS RETURN";: INPUT " ";DK$
  71. 385  CALL  -936
  72. 390  RETURN 
  73. 395  POKE 222,0: CALL RWTS: IF  PEEK(222) = 0  THEN  RETURN 
  74. 397  POP 
  75. 400  HOME : PRINT "ERROR TRYING TO ADD DATE/TIME STAMP!!! ": IF  PEEK(IOB +13) = 16  THEN  PRINT "DISK IS WRITE PROTECTED"
  76. 420  PRINT "RETRY ADDING DATE/TIME STAMP(Y OR N)?";
  77. 430  GET A$: IF A$ < >"Y"  AND A$ < >"N"  THEN  PRINT  CHR$(7);: GOTO 430
  78. 440  PRINT : HOME : IF A$ = "Y"  THEN 194
  79. 450  GOTO 200